home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
bricon
/
source
/
main.asm
< prev
next >
Wrap
Assembly Source File
|
1991-10-18
|
7KB
|
420 lines
.286
_TEXT SEGMENT WORD PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT WORD PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
_INST SEGMENT WORD PUBLIC 'INST'
_INST ENDS
DGROUP GROUP _TEXT, CONST, _BSS, _DATA, _INST
extrn _setbios:near
extrn _resetbios:near
extrn His_init:near
extrn His_end:near
extrn _VDB_00:near
extrn _cflush:near
extrn swap_save:near
extrn swap_load:near
extrn move_proc:near
;extrn oak_set:near
;extrn oak_reset:near
_DATA segment
Exe_Param dw ? ; Envp Seg +0
dw ? ; para offset +2
dw ? ; seg +4
dw offset DGROUP:Exe_fcb1 ; FCB1 offset +6
dw ? ; seg +8
dw offset DGROUP:Exe_fcb2 ; FCB2 offset +10
dw ? ; seg +12
Exe_fcb1 db 16 dup (0)
Exe_fcb2 db 16 dup (0)
Command db 'C:\COMMAND.COM'
db 128 dup (0)
Def_Param db 0,0Dh
_DATA ends
_TEXT segment
ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
org 02ch
EnvSeg label word
org 080h
CmdsLine label word
org 100h
entry: jmp main
_TEXT ends
_INST segment
ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
main proc near
mov ax,cs
mov ds,ax
mov es,ax
cld
mov sp,offset DGROUP:Local_Stack
mov ax,cs
mov es,ax
mov bx,offset DGROUP:End_of_Prog
add bx,15
shr bx,4
mov ah,4Ah
int 21h
call move_proc
call Screen_init
call _setbios
; call oak_set
call His_init
call Path_init
call PF_key_init
call swap_save
mov di,offset DGROUP:Exe_Param
mov ax,EnvSeg
mov [di+0],ax
mov ax,ds
mov [di+4],ax
mov [di+8],ax
mov [di+12],ax
mov si,offset DGROUP:CmdsLine
lodsb
cmp al,0
je Def_Fork
mov ah,al
main_1: cmp ah,0
je Def_Fork
dec ah
lodsb
cmp al,0Dh
je Def_Fork
cmp al,' '
je main_1
cmp al,09h
je main_1
mov bx,offset DGROUP:Command
jmp main_5
main_2: cmp ah,0
je main_4
dec ah
lodsb
cmp al,0Dh
je main_4
cmp al,' '
je main_3
cmp al,09h
je main_3
main_5: mov [bx],al
inc bx
jmp short main_2
main_3: dec si
mov [si],ah
mov [di+2],si
mov byte ptr [bx],0
jmp short Com_Fork
main_4: mov byte ptr [bx],0
Def_Fork: mov word ptr [di+2],offset DGROUP:Def_Param
Com_Fork: push ds
pop es
mov si,[di+2]
mov di,offset DGROUP:Exe_fcb1
mov ax,2901h
int 21h
mov di,offset DGROUP:Exe_fcb2
mov ax,2901h
int 21h
mov dx,offset DGROUP:Command
mov bx,offset DGROUP:Exe_Param
mov ax,4B00h
int 21h
call swap_load
call His_end
call _resetbios
; call oak_reset
mov ax,4C00h ; End of Oricon
int 21h
main endp
Pal_Tbl db 000h,000h,000h
db 0B0h,000h,000h
db 000h,0B0h,000h
db 0B0h,0B0h,000h
db 000h,000h,0B0h
db 0B0h,000h,0B0h
db 000h,0B0h,0B0h
db 0B0h,0B0h,0B0h
db 0B0h,0B0h,0B0h
db 0F0h,000h,000h
db 000h,0F0h,000h
db 0F0h,0F0h,000h
db 000h,000h,0F0h
db 0F0h,000h,0F0h
db 000h,0F0h,0F0h
db 0F0h,0F0h,0F0h
CRT_Reg_Tbl dw 0040h,0320h,0000h,0000h
dw 035Fh,0000h,0010h,0000h
dw 036Fh,009Ch,031Ch,009Ch
dw 031Ch,0040h,0360h,0040h
dw 0360h,0000h,009Ch,0000h
dw 0050h,0000h,009Ch,0000h
dw 0050h,004Ah,0001h,0000h
dw 003Fh,0003h,0000h,0150h
Palet_init proc near
sub cl,cl
mov si,offset DGROUP:Pal_Tbl
Pal_init_1: mov al,cl
mov dx,0FD90h
out dx,al
lodsb
mov dx,0FD92h
out dx,al
lodsb
mov dx,0FD94h
out dx,al
lodsb
mov dx,0FD96h
out dx,al
inc cl
cmp cl,16
jb Pal_init_1
ret
Palet_init endp
;
; SI = Data Address
;
CRTC_set proc near
sub cl,cl
CRTC_set_1: mov al,cl
mov dx,0440h
out dx, al
lodsw
mov dx,0442h
out dx, ax
inc cl
cmp cl,32
jb CRTC_set_1
ret
CRTC_set endp
;
; AL = Val
;
CRTC_onoff proc near
push ax
mov al,01Ch
mov dx,0440h
out dx,al
pop ax
mov dx,0443h
out dx,al
ret
CRTC_onoff endp
;
; SI = Data Address
;
CRTC_init proc near
mov al,0
call CRTC_onoff
call CRTC_set
mov al,byte ptr [CRT_Reg_Tbl+01Ch*2]
or al,80h
call CRTC_onoff
ret
CRTC_init endp
;
; AX = Val
;
Video_init proc near
push ax
mov al,0
mov dx,0448h
out dx,al
pop ax
mov dx,044Ah
out dx,al
mov al,1
mov dx,0448h
out dx,al
mov al,ah
mov dx,044Ah
out dx,al
ret
Video_init endp
Screen_init proc near
mov al,0
mov dx,0FDA0h
out dx,al
mov si,offset DGROUP:CRT_Reg_Tbl
call CRTC_init
mov ax,0815h
call Video_init
call Palet_init
call _VDB_00
call _cflush
mov al,0Fh
mov dx,0FDA0h
out dx,al
ret
Screen_init endp
pf_key_tbl db 01h,80h, 2,1Bh,'S' ;PF1
db 02h,80h, 2,1Bh,'T' ;PF2
db 03h,80h, 2,1Bh,'U' ;PF3
db 04h,80h, 2,1Bh,'V' ;PF4
db 05h,80h, 2,1Bh,'W' ;PF5
db 06h,80h, 2,1Bh,'E' ;PF6
db 07h,80h, 2,1Bh,'J' ;PF7
db 08h,80h, 2,1Bh,'P' ;PF8
db 09h,80h, 2,1Bh,'Q' ;PF9
db 0ah,80h, 2,1Bh,'Z' ;PF10
db 0bh,80h, 2,1Bh,'S' ;PF11
db 1dh,80h, 2,1Bh,'T' ;PF12
db 21h,80h, 2,1Bh,'U' ;PF13
db 22h,80h, 2,1Bh,'V' ;PF14
db 23h,80h, 2,1Bh,'W' ;PF15
db 24h,80h, 2,1Bh,'E' ;PF16
db 25h,80h, 2,1Bh,'J' ;PF17
db 26h,80h, 2,1Bh,'P' ;PF18
db 27h,80h, 2,1Bh,'Q' ;PF19
db 28h,80h, 2,1Bh,'Z' ;PF20
db 12h,00h, 2,1Bh,'P' ;[INS]
db 7fh,00h, 2,1Bh,'V' ;[DEL]
db 18h,80h, 0 ;[半角/全角]
db 1ch,80h, 0 ;[かな漢字]
db 0,0
Start_msg db 'FM-Towns FMR50 コンソ-ルシュミレ-タ v1.09'
db 0Dh,0Ah
db 'Programmed by K.MIYAZAKI'
db 0Dh,0Ah
db 'Asistant programmer N.YAMAZAKI'
db 0Dh,0Ah
; db 0Dh,0Ah
; db 'FM-Towns OAK/2 フロントエンドプロセッサー v1.04a'
; db 0Dh,0Ah
; db 'Programmed by N.YAMAZAKI'
; db 0Dh,0Ah
; db 'Investigated by K.MIYAZAKI Thanks a lot.'
; db 0Dh,0Ah
db '$'
PF_key_init proc near
mov di,offset DGROUP:pf_key_tbl
xor cx,cx
key_set: mov dx,word ptr [di]
cmp dx,0
je key_st_e
add di,2
mov cl,[di]
inc di
mov ax,0E00h
int 90h
add di,cx
jmp key_set
key_st_e: mov dx,offset DGROUP:Start_Msg
mov ah,09h
int 21h
ret
PF_key_init endp
extrn _path_top:near
Path_init proc near
ASSUME DS: nothing, ES: DGROUP
push ds
push es
mov ax,ds
mov es,ax
mov ds,es:[EnvSeg]
mov si,0
mov di,offset DGROUP:_path_top
_Path_1: cmp byte ptr ds:[si],0
je _Path_4
mov ax,ds:[si]
and ax,0DFDFh
cmp ax,'A'*256+'P'
jne _Path_3
mov ax,ds:[si+2]
and ax,0DFDFh
cmp ax,'H'*256+'T'
jne _Path_3
cmp byte ptr ds:[si+4],'='
jne _Path_3
add si,5
_Path_2: cmp byte ptr ds:[si],0
je _Path_4
cmp di,offset DGROUP:_path_top+127
jnb _Path_4
movsb
jmp _Path_2
_Path_3: lodsb
cmp al,0
jne _Path_3
jmp _Path_1
_Path_4: mov byte ptr es:[di],0
pop es
pop ds
ret
ASSUME DS: DGROUP, ES: nothing
Path_init endp
db 256 dup (?)
Local_Stack label word
public End_of_Prog
End_of_Prog label word
_INST ends
end entry